package com.sky.orangehireserver.modules.job_seeker.dto;

import com.sky.orangehireserver.utils.BasePageQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;

/**
 * 求职者岗位查询请求DTO
 * 
 * @author sky
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "求职者岗位查询请求DTO")
public class SeekerJobQueryDTO extends BasePageQuery {

    /**
     * 职位名称（模糊查询）
     */
    @Schema(description = "职位名称（模糊查询）", example = "Java")
    private String title;

    /**
     * 企业名称（模糊查询）
     */
    @Schema(description = "企业名称（模糊查询）", example = "阿里")
    private String companyName;

    /**
     * 工作地点/城市
     */
    @Schema(description = "工作地点/城市", example = "北京")
    private String location;

    /**
     * 所属部门
     */
    @Schema(description = "所属部门", example = "技术部")
    private String department;

    /**
     * 工作类型
     */
    @Schema(description = "工作类型", example = "full_time", allowableValues = {"full_time", "part_time", "intern", "contract"})
    private String employmentType;

    /**
     * 经验要求
     */
    @Schema(description = "经验要求", example = "mid", allowableValues = {"junior", "mid", "senior"})
    private String seniority;

    /**
     * 学历要求
     */
    @Schema(description = "学历要求", example = "bachelor", allowableValues = {"bachelor", "master", "phd", "none"})
    private String education;

    /**
     * 最低薪资
     */
    @Schema(description = "最低薪资", example = "10000")
    private BigDecimal salaryMin;

    /**
     * 最高薪资
     */
    @Schema(description = "最高薪资", example = "20000")
    private BigDecimal salaryMax;

    /**
     * 货币类型
     */
    @Schema(description = "货币类型", example = "CNY")
    private String currency;

    /**
     * 职位标签/关键词（模糊查询）
     */
    @Schema(description = "职位标签/关键词（模糊查询）", example = "Spring")
    private String tags;

    /**
     * 排序字段
     */
    @Schema(description = "排序字段", example = "created_at", allowableValues = {"created_at", "salary_min", "salary_max", "views_count", "applications_count"})
    private String sortField;

    /**
     * 排序方向
     */
    @Schema(description = "排序方向", example = "desc", allowableValues = {"asc", "desc"})
    private String sortOrder;
}